package com.todo.biz.conf;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

/**
 * @author zhangwenxiang
 * @date 2024/3/2 13:39
 * @description
 */
@Configuration
public class SwaggerOpenApiConfig {

    @Value("${springdoc.info.title}")
    private String title;
    @Value("${springdoc.info.description}")
    private String description;
    @Value("${springdoc.info.version}")
    private String version;
    @Value("${springdoc.info.contact.name}")
    private String name;
    @Value("${springdoc.info.contact.email}")
    private String email;

    /***
     * 构建途度文档说明
     * 本地地址：http://ip:port/doc.html
     * @return 返回 OpenAPI
     */
    @Bean
    public OpenAPI customOpenAPI() {

        Contact contact = new Contact()
                .name(name)                             // 作者名称
                .email(email)                   // 作者邮箱
                .url("")  // 介绍作者的URL地址
                .extensions(new HashMap<String, Object>()); // 使用Map配置信息（如key为"name","email","url"）

        License license = new License()
                .name("Apache 2.0")                         // 授权名称
                .url("https://www.apache.org/licenses/LICENSE-2.0.html")    // 授权信息
                .identifier("Apache-2.0")                   // 标识授权许可
                .extensions(new HashMap<String, Object>());// 使用Map配置信息（如key为"name","url","identifier"）

        //创建Api帮助文档的描述信息、联系人信息(contact)、授权许可信息(license)
        Info info = new Info()
                .title(title)      // Api接口文档标题（必填）
                .description(description)     // Api接口文档描述
                .version(version)                                  // Api接口版本
                .termsOfService("")            // Api接口的服务条款地址
                .license(license)                             // 设置联系人信息
                .contact(contact);                                 // 授权许可信息
        // 返回信息
        return new OpenAPI()
                .openapi("3.0.1")  // Open API 3.0.1(默认)
                .info(info);       // 配置Swagger3.0描述信息
    }
}
